package errs

import (
	"errors"
	"fmt"
)

var (
	ErrPointerOnly             = errors.New("orm: 只支持指向结构体的一级指针 如： *Model")
	ErrTableNameCanNotBeEmpty  = errors.New("orm: 表名不能为空")
	ErrColumnNameCanNotBeEmpty = errors.New("orm: 列不能为空")
	ErrNotSupportSqlType       = errors.New("sql: not support type")
	ErrNoRows                  = errors.New("orm: 没有数据")
	// ErrInsertZeroRow 代表插入 0 行
	ErrInsertZeroRow                = errors.New("orm: 插入 0 行")
	ErrGroupByCanNotBeEmptyInHaving = errors.New("orm: 不能单独使用having 而没有group by")
)

func NewErrUnsupportedExpression(expr any) error {
	return fmt.Errorf("orm: 不支持的表达式类型%v,%T", expr, expr)
}

func NewErrFailedToRollbackTx(bizErr error, rbErr error, panicked bool) error {
	return fmt.Errorf("orm: 事务闭包回滚失败，业务错误: %w，回滚错误 %s，"+
		"是否 panic: %t", bizErr, rbErr, panicked)
	// return fmt.Errorf("orm: 事务闭包回滚失败，业务错误: %s，回滚错误 %w，" +
	// 	"是否 panic: %t", bizErr, rbErr, panicked)

}

func NewErrModelNotFound(expr any) error {
	return fmt.Errorf("orm: 注册中心找不到model%v", expr)
}

func NewErrUnknownField(field any) error {
	return fmt.Errorf("orm: 未知列%v", field)
}

func NewErrUnknownColumn(field any) error {
	return fmt.Errorf("orm: 未知列%v", field)
}

func NewErrInvalidTagContent(pair any) error {
	return fmt.Errorf("orm: orm非法标签%v", pair)
}

func NewErrUnsupportedAssignable(expr any) error {
	return fmt.Errorf("orm: 不支持的赋值表达式类型 %v", expr)
}

func NewErrUnsupportedTable(table any) error {
	return fmt.Errorf("orm: 不支持的TableReference类型 %v", table)
}
